package lc.weekly;

/**
 * <a href="https://leetcode-cn.com/contest/biweekly-contest-78">第 78 场双周赛</a>
 * <p>
 * 本场竞赛为「力扣全球招募」专场
 */
public interface BiweeklyContest78 {

    /**
     * 5299. 找到一个数字的 K 美丽值
     * <p>
     * <p>
     * 一个整数 num 的 <strong>k</strong> 美丽值定义为 num 中符合以下条件的 子字符串 数目：
     * <ul>
     *     <li>子字符串长度为 <strong>k</strong> 。</li>
     *     <li>子字符串能整除 num 。</li>
     * </ul>
     * 给你整数 num 和 k ，请你返回 num 的 k 美丽值。
     * <p>
     * 注意：
     * <ul>
     *     <li>允许有 <strong>前缀 0</strong> 。</li>
     *     <li>0 不能整除任何值。</li>
     * </ul>
     * <p>
     * <p>
     * 一个 <strong>子字符串</strong> 是一个字符串里的连续一段字符序列。
     * <p>
     * <strong>提示：</strong>
     * <ul>
     *     <li>1 <= num <= 10<sup>9</sup></li>
     *     <li>1 <= k <= num.length （将 num 视为字符串）</li>
     * </ul>
     *
     * @param num
     * @param k
     * @return
     */
    int divisorSubstrings(int num, int k);

    /**
     * 6067. 分割数组的方案数
     * <p>
     * <p>
     * 给你一个下标从 <strong>0</strong> 开始长度为 n 的整数数组 nums 。
     * 如果以下描述为真，那么 nums 在下标 i 处有一个 <strong>合法的分割</strong> ：
     * <p>
     * 前 i + 1 个元素的和 <strong>大于等于</strong> 剩下的 n - i - 1 个元素的和。
     * 下标 i 的右边 <strong>至少有一个</strong> 元素，也就是说下标 i 满足 0 <= i < n - 1 。
     * 请你返回 nums 中的 <strong>合法分割</strong> 方案数。
     * <p>
     * <p>
     * <strong>提示：</strong>
     * <ul>
     *     <li>2 <= nums.length <= 10<sup>5</sup></li>
     *     <li>-10<sup>5</sup> <= nums[i] <= 10<sup>5</sup></li>
     * </ul>
     *
     * @param nums
     * @return
     */
    int waysToSplitArray(int[] nums);

    /**
     * 6068. 毯子覆盖的最多白色砖块数
     * <p>
     * <p>
     * 给你一个二维整数数组 tiles ，其中 tiles[i] = [l<sub>i</sub>, r<sub>i</sub>] ，表示所有在 l<sub>i</sub> <= j <= r<sub>i</sub> 之间的每个瓷砖位置 j 都被涂成了白色。
     * <p>
     * 同时给你一个整数 carpetLen ，表示可以放在 <strong>任何位置</strong> 的一块毯子。
     * <p>
     * 请你返回使用这块毯子，<strong>最多</strong> 可以盖住多少块瓷砖。
     * <p>
     * <p>
     * <strong>提示：</strong>
     * <ul>
     *     <li>1 <= tiles.length <= 5 * 10<sup>4</sup></li>
     *     <li>tiles[i].length == 2</li>
     *     <li>1 <= l<sub>i</sub> <= r<sub>i</sub> <= 10<sup>9</sup></li>
     *     <li>1 <= carpetLen <= 10<sup>9</sup></li>
     *     <li>tiles 互相 <strong>不会重叠</strong> 。</li>
     * </ul>
     *
     * @param tiles
     * @param carpetLen
     * @return
     */
    int maximumWhiteTiles(int[][] tiles, int carpetLen);

    /**
     * 6069. 最大波动的子字符串
     * <p>
     * <p>
     * 字符串的 <strong>波动</strong> 定义为子字符串中出现次数 <strong>最多</strong> 的字符次数与出现次数 <strong>最少</strong> 的字符次数之差。
     * <p>
     * 给你一个字符串 s ，它只包含小写英文字母。请你返回 s 里所有 <strong>子字符串的</strong> <strong>最大波动</strong> 值。
     * <p>
     * <strong>子字符串</strong> 是一个字符串的一段连续字符序列。
     * <p>
     * <p>
     * <strong>提示：</strong>
     * <ul>
     *     <li>1 <= s.length <= 10<sup>4</sup></li>
     *     <li>s  只包含小写英文字母。</li>
     * </ul>
     *
     * @param s
     * @return
     */
    int largestVariance(String s);
}
